package com.dadao.mall.lambdademo;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

/**
 * Function就好玩了，可以自定义传入的类型以及传出的类型。T表示传入的类型，R表示传出的类型。
 * Function接口只有一个未实现的R apply(T t)方法，用于传入一个T类型的值，
 * 而传出一个R类型的值。比如我们现在需要把一组字符串的长度全部输出出来。
 * 在以往我们就需要通过遍历所有的元素，然后用一个集合去封装，
 * 在遍历中一个一个取出长度放入我们新建的集合当中去，然后将这个集合进行返回。
 *
 */
public class FunLearn {
    public static void main(String[] args) {
        List<Cat> catList = new ArrayList();
        for (int i = 1; i < 30; i++) {
            Cat p = new Cat(i % 2 == 1, i + 5);
            p.name = "name"+i ;
            catList.add(p);
        }
        System.out.println("将所有名字拼接");
        String allName = FunLearn.sum(catList,p->p.name);
        System.out.println(allName);


    }


    public static <T,R> String sum(List<Cat> catList, Function<Cat,String> fun){
        String sum = "";
        for (Cat c: catList){
            sum += fun.apply(c);
        }
        return sum;
    }
}
